from django.urls import reverse
from django.http import JsonResponse
from django.utils.translation.trans_null import activate
from django_redis import get_redis_connection
from django.shortcuts import render,HttpResponse,redirect
from django import forms

from utils.link import filter_reverse
from web import models
from django.conf import settings

from utils.reponse import BaseResponse
from utils.code import get_code,send_sms
from web.forms import account_form
from web.forms.account_form import LeveModelForm


#用户等级显示界面
def level_list(request):
    #读取数据库 查找没有逻辑删除的数据
    queryset = models.Level.objects.filter(active = 1)
    # print("level_show",level_show)
    # for i in level_show:
    #     print(i.title,i.percent)
    return render(request, "level_list.html",{"level_show":queryset})

# 添加等级(自己写的方法）
def level_add_my(request):
    form = account_form.AddForm(data=request.POST)
    if not form.is_valid():#开始校验 如果失败 form返回输入的原值 客户输入的值不丢失
        return render(request, "level_add.html", {"form": form}) #输入错误记得返回form
    # 否则Form校验成功
    # print(form.cleaned_data)  # 校验成功 返回 用户输入的值{'username'：admin，'password'：123}
    level_data = form.cleaned_data.get('level')
    percent_data = form.cleaned_data.get('percent')
    print("级别，折扣",level_data,percent_data)
    models.Level.objects.create(active = 1,title = level_data,percent = percent_data)
    url = reverse("level_list")
    return redirect(url)



# 添加等级(老师方法）
def level_add(request):
    if request.method == "GET":
        form = LeveModelForm()
        return render(request,"form.html",{"form":form})
    form =  LeveModelForm(data=request.POST)
    if not form.is_valid():
        # 返回异常
        return render(request,"form.html",{"form":form})
    # 验证通过写入数据库；校验后自动依据数据库 添加，更新
    form.save() #自己依据定义的数据库更新 不需要手写 models.Level.objects.create(**form.cleaned_data)

    return redirect(reverse("level_list"))

#编辑用户等级
def level_edit(request,pk):
    #根据ID获取数据库的值
    level_object = models.Level.objects.filter(id=pk, active=1).first()
    # 返回一个与添加用户等级一样的一个界面 get表示访问获取界面
    if request.method == "GET":
        # instance 传一个对象 显示默认值
        form = LeveModelForm(instance=level_object)
        return render(request, 'form.html', {"form": form})
    # 获取数据 校验 并且更新数据
    form = LeveModelForm(data=request.POST, instance=level_object) #传入一个 instance = 数据库对象，没有instance就是新增
    if not form.is_valid():
        return render(request, 'form.html', {"form": form})
    #自动更新
    form.save()
    # 优化 ：修改数据后跳转回之前的界面
    url = filter_reverse(request, reverse('level_list'))  # 函数方法实现
    return redirect(url)

#删除用户等级函数
def level_delete(request, pk):

    print("删除用户等级函数")
    # A 级别删除之前需要判断有没有关联客户,有就不能删除
    exists  =models.Customer.objects.filter(level_id=pk).exists()

    #B设置一个默认值 如None
    # exists = models.Customer.objects.filter(level_id=pk).update(level = None)
    # 使用逻辑删除 更新active=0 不是物理删除
    if not exists:
        models.Level.objects.filter(id=pk).update(active=0)
    return redirect(reverse('level_list'))


